//配置文件 axios
import axios from "axios";

// 引入elementui的弹框
import { MessageBox, Message, Loading } from "element-ui";
//引入storage方法
import storage from "@/utils/storage";

let http = axios.create({
  baseURL: "/api", //代理服务器
  timeout: 5000, //超时设置
  withCredentials: true, //携带本地凭证 比如cookie
});

//全局的请求拦截器 对接口的请求批量进行统一处理

// loading加载动画
let fullScreenLoading = null;

http.interceptors.request.use((config) => {
  //先获取本地的token，然后携带给后端
  let token = storage.get("qf-token");
  // console.log(token);
  config.headers["authorization"] = token;

  // console.log(config)
  // loading加载动画开启
  if (
    config.url.indexOf("login") !== -1 ||
    config.url.indexOf("wechatLogin") !== -1
  ) {
    fullScreenLoading = Loading.service({
      lock: true,
      text: "Loading",
      spinner: "el-icon-loading",
      background: "rgba(0, 0, 0, 0.7)",
    });
  }

  //config就是所有的请求配置
  return config; //放行 不return 那么不能将请求真正的发送出去
});

//全局的响应拦截 统一对错误进行处理
http.interceptors.response.use((config) => {
  // console.log("config", config);
  let { state, msg } = config.data;
  if (!state && config.config.url !== "/order/query_order_status") {
    //后台响应了错误的结果
    MessageBox({
      message: msg,
      title: "错误提示",
      type: "error",
    });
  }

  // loading加载动画关闭
  if (fullScreenLoading) {
    fullScreenLoading.close();
    fullScreenLoading = null;
  }

  //10022 1004这两个状态码，分别对应了token过期和session过期
  //如果出现这2个状态码，跳转到登录页，清除掉本地缓存，清除掉token
  // 10026  没有权限

  let { code } = config.data;
  if ((code === "100022") | (code === "1004")) {
    Message.error("登录过期，请重新登录");
    // 清除token
    storage.rm("qf-token");
    //刷新页面
    location.reload();
  }

  return config; //如果不return axios请求就拿不到响应结果
});

export default http;
